﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.IO;
using System.Drawing.Imaging;
using Microsoft.VisualBasic.Devices;

namespace 作死
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 关于AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // 显示“关于”窗口
            关于 about = new 关于();
            about.ShowDialog(); 
        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // 退出程序
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 开启主页面
            Windows_桌面 windows = new Windows_桌面();
            windows.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("错误！",
                "错误",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error);
        }
    }
}


//----------------------------------------------

/*
 *******************************************************************************************************
 * 命名空间信息：                                                                                      *
 *     作者：gfdgd xi                                                                                  *
 *     版本：1.0                                                                                       *
 *     制作（修改）时间：2020年11月14日16:59:39                                                        *
 *     是否含有中文：有                                                                                *
 *     是否含有注释：有                                                                                *
 *     目的：让大家更好的修改系统信息而制作的命名空间，内含中文注释和提示，不需要大家自己造轮子        *
 *     测试平台：Visual Studio 2017 Enterprise 编辑器                                                  *
 *               Windows Server 2008 R2 操作系统                                                       *
 *     已知问题：在获取我的电脑隐藏图标是否有显示时，方法返回的值都是false                             *
 *******************************************************************************************************
 */
namespace SystemSettings     // 需要引用Microsoft.Win32，需要读取系统注册表
// 需要引用System.Diagnostics，需要对进程进行操作
// 需要引用System.Runtime.InteropServices，需要调用系统API
// 需要引用System.IO，用于修改文件
// 需要引用System.Drawing.Imaging，用于定义图片格式
// 需要引用System，用于访问系统设置
// 需要引用Microsoft.VisualBasic.Devices，用于获取系统设置
{
    class Settings
    {
        /// <summary>  
        /// 修改注册表信息来兼容当前程序  
        ///   
        /// </summary>  
        static void SetWebBrowserFeatures(int ieVersion)
        {
            // don't change the registry if running in-proc inside Visual Studio  
            if (LicenseManager.UsageMode != LicenseUsageMode.Runtime)
                return;
            //获取程序及名称  
            var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
            //得到浏览器的模式的值  
            UInt32 ieMode = GeoEmulationModee(ieVersion);
            var featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\";
            //设置浏览器对应用程序（appName）以什么模式（ieMode）运行  
            Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION",
                appName, ieMode, RegistryValueKind.DWord);
            // enable the features which are "On" for the full Internet Explorer browser  
            //不晓得设置有什么用  
            Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION",
                appName, 1, RegistryValueKind.DWord);


            //Registry.SetValue(featureControlRegKey + "FEATURE_AJAX_CONNECTIONEVENTS",  
            //    appName, 1, RegistryValueKind.DWord);  


            //Registry.SetValue(featureControlRegKey + "FEATURE_GPU_RENDERING",  
            //    appName, 1, RegistryValueKind.DWord);  


            //Registry.SetValue(featureControlRegKey + "FEATURE_WEBOC_DOCUMENT_ZOOM",  
            //    appName, 1, RegistryValueKind.DWord);  


            //Registry.SetValue(featureControlRegKey + "FEATURE_NINPUT_LEGACYMODE",  
            //    appName, 0, RegistryValueKind.DWord);  
        }
        /// <summary>  
        /// 获取浏览器的版本  
        /// </summary>  
        /// <returns></returns>  
        static int GetBrowserVersion()
        {
            int browserVersion = 0;
            using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
                RegistryKeyPermissionCheck.ReadSubTree,
                System.Security.AccessControl.RegistryRights.QueryValues))
            {
                var version = ieKey.GetValue("svcVersion");
                if (null == version)
                {
                    version = ieKey.GetValue("Version");
                    if (null == version)
                        throw new ApplicationException("Microsoft Internet Explorer is required!");
                }
                int.TryParse(version.ToString().Split('.')[0], out browserVersion);
            }
            //如果小于7  
            if (browserVersion < 7)
            {
                throw new ApplicationException("不支持的浏览器版本!");
            }
            return browserVersion;
        }
        /// <summary>  
        /// 通过版本得到浏览器模式的值  
        /// </summary>  
        /// <param name="browserVersion"></param>  
        /// <returns></returns>  
        static UInt32 GeoEmulationModee(int browserVersion)
        {
            UInt32 mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode.   
            switch (browserVersion)
            {
                case 7:
                    mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.   
                    break;
                case 8:
                    mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.   
                    break;
                case 9:
                    mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.                      
                    break;
                case 10:
                    mode = 10000; // Internet Explorer 10.  
                    break;
                case 11:
                    mode = 11000; // Internet Explorer 11  
                    break;
            }
            return mode;
        }
        public void 让WebBrowser使用InternetExplorer11内核()
        {
            SetWebBrowserFeatures(11);
        }
        // 调用系统API
        // 获取屏幕分辨率
        /// <summary>
        /// 获取屏幕分辨率（横）
        /// </summary>
        public int 屏幕分辨率横()
        {
            return Screen.PrimaryScreen.Bounds.Width;
        }
        /// <summary>
        /// 获取屏幕分辨率（竖）
        /// </summary>
        public int 屏幕分辨率竖()
        {
            return Screen.PrimaryScreen.Bounds.Height;
        }
        // 用于更改分辨率
        public enum DMDO
        {
            DEFAULT = 0,
            D90 = 1,
            D180 = 2,
            D270 = 3
        }

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        struct DEVMODE
        {
            public const int DM_DISPLAYFREQUENCY = 0x400000;
            public const int DM_PELSWIDTH = 0x80000;
            public const int DM_PELSHEIGHT = 0x100000;
            private const int CCHDEVICENAME = 32;
            private const int CCHFORMNAME = 32;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;

            public int dmPositionX;
            public int dmPositionY;
            public DMDO dmDisplayOrientation;
            public int dmDisplayFixedOutput;

            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
            public int dmICMMethod;
            public int dmICMIntent;
            public int dmMediaType;
            public int dmDitherType;
            public int dmReserved1;
            public int dmReserved2;
            public int dmPanningWidth;
            public int dmPanningHeight;
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        //static extern int ChangeDisplaySettings( DEVMODE lpDevMode,  int dwFlags);

        static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
        private System.ComponentModel.Container components = null;
        /// <summary>
        /// 更改屏幕分辨率
        /// </summary>
        /// <param name="x">屏幕分辨率（横）</param>
        /// <param name="y">屏幕分辨率（竖）</param>
        /// <param name="di">屏幕刷新率</param>
        public void 更改屏幕分辨率(int x,int y,int di)
        {
            long RetVal = 0;
            DEVMODE dm = new DEVMODE();
            dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            dm.dmPelsWidth = x;
            dm.dmPelsHeight = y;
            dm.dmDisplayFrequency = di;
            dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
            RetVal = ChangeDisplaySettings(ref dm, 0);

        }
        /// <summary>
        /// 获取程序所在路径（含程序文件名）
        /// </summary>
        /// <returns>程序所在路径（含程序文件名）</returns>
        public string 获取程序路径()
        {
            return GetType().Assembly.Location;
        }
        /// <summary>
        /// 重新启动该程序
        /// </summary>
        public void 启动该程序()
        {
            开启进程(获取程序路径());
        }
        /// <summary>
        /// 是否启用数字锁定
        /// </summary>
        /// <returns>true 为启用，false 为未启用</returns>
        public bool 是否打开数字锁定()
        {
            Computer info = new Computer();
            return info.Keyboard.NumLock;
        }
        /// <summary>
        /// 是否启用大写锁定
        /// </summary>
        /// <returns>true 为启用，false 为未启用</returns>
        public bool 是否打开大写锁定()
        {
            Computer info = new Computer();
            return info.Keyboard.CapsLock;
        }
        /// <summary>
        /// 是否启用滚动锁定
        /// </summary>
        /// <returns>true 为启用，false 为未启用</returns>
        public bool 是否打开滚动锁定()
        {
            Computer info = new Computer();
            return info.Keyboard.ScrollLock;
        }
        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <param name="path">文件所在路径</param>
        /// <returns>true 为存在， false 为不存在</returns>
        public bool 判断文件是否存在(string path)
        {
            return File.Exists(path);
        }
        /// <summary>
        /// 判断文件夹是否存在
        /// </summary>
        /// <param name="path">文件夹所在路径</param>
        /// <returns>true 为存在，false 为不存在</returns>
        public bool 判断文件夹是否存在(string path)
        {
            return Directory.Exists(path);
        }
        /// <summary>
        /// 给这台计算机开启/关闭休眠
        /// </summary>
        /// <param name="setting">true 为启动休眠，false 为关闭休眠</param>
        public string 设置休眠(bool setting)
        {
            Cmd cmd = new Cmd();
            switch (setting)
            {
                case true:
                    cmd.执行命令("powercfg -h on"); // 执行对应命令
                    break;
                case false:
                    cmd.执行命令("powercfg -h off"); // 执行对应命令
                    break;
            }
            return cmd.返回结果;
        }
        /// <summary>
        /// 获取该电脑的系统盘符，将返回类似“C:”的内容
        /// </summary>
        /// <returns>系统盘符，格式为“C:”</returns>
        public string 系统盘盘符()
        {
            return Environment.GetEnvironmentVariable("systemdrive");
        }
        public bool 是否开启休眠()
        {
            // 原理解释：
            // 通过判断系统盘下有没有“hiberfil.sys”文件
            return 判断文件是否存在(系统盘盘符() + @"/hiberfil.sys");
        }
        [DllImport("winmm.dll")] // 用于弹出/收回光驱的API
        public static extern int mciSendString(string s1, string s2, int i1, int i2);
        /// <summary>
        /// 弹出/收回光驱
        /// </summary>
        /// <param name="setting">true 为弹出光驱，false 为收回光驱</param>
        public void 弹出收回光驱(bool setting)
        {
            switch (setting)
            {
                case true:
                    mciSendString("set cdaudio door open", "", 0, 0);
                    break;
                case false:
                    mciSendString("set cdaudio door closed", "", 0, 0);
                    break;
            }
        }
        /// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="TaskTistname">要关闭进程的程序（包含该字符串不算）</param>
        public void 关闭指定进程(string TaskTistname)
        {
            // 操作流程：
            // 获取全部进程名单→一一判断是否有对应的名称→如果有，就关闭它→End
            Process[] ps = Process.GetProcesses();// 先获取电脑所有进程
            foreach (Process p in ps) // 一一读取
            {
                if (p.ProcessName.Contains(TaskTistname))// 如果找到对应的程序名
                {
                    p.Kill();// 停止进程
                }
            }
        }
        /// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="TaskTistname">要关闭进程的程序（只要有包含该字符串都算）</param>
        public void 关闭含有指定字符串的进程(string TaskTistname)
        {
            // 操作流程：
            // 获取全部进程名单→一一判断是否有对应的名称→如果有，就关闭它→End
            Process[] ps = Process.GetProcesses();// 先获取电脑所有进程
            foreach (Process p in ps) // 一一读取
            {
                if (p.ProcessName.Contains(TaskTistname))// 如果找到对应的程序名
                {
                    p.Kill();// 停止进程
                }
            }
        }
        /// <summary>
        /// 开启进程
        /// </summary>
        /// <param name="opensoftware">程序所在路径</param>
        public void 开启进程(string opensoftware)
        {
            Process.Start(opensoftware); // 启动进程
        }

        // 用于调用系统API（实现清空回收站功能）
        [DllImport("shell32.dll")]
        private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);
        const int SHERB_NOCONFIRMATION = 0x000001;
        const int SHERB_NOPROGRESSUI = 0x000002;
        const int SHERB_NOSOUND = 0x000004;
        /// <summary>
        /// 清空回收站
        /// </summary>
        /// <param name="form">当前窗体，一般传入this</param>
        public void 清空回收站(Form form)
        {
            SHEmptyRecycleBin(form.Handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND); // 清空回收站
        }
        public void 获取文件图标()
        {

        }
        /// <summary>
        /// 把指定的程序添加至右键菜单
        /// </summary>
        /// <param name="name">显示的名称</param>
        /// <param name="path">软件所在路径（如果文件已经添加到环境变量，如记事本notepad，就不需要输具体路径）</param>
        public void 右键用指定程序打开(string name, string path = "notepad")
        {
            // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell”
            // 然后在此创建一个项（Key），项的名称为要在右键菜单显示的名称
            // 然后在里面创建一个项，项的名称为“command”
            // 默认值为指定的程序
            // 目录结构如下：
            //
            // HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell（懒，前面省略）
            // |
            // |
            // +----- Open wiht software（要在右键菜单显示的名称）
            //             |
            //             |
            //             +------ command 
            //                          |
            //                          +----- software "%1" （指定的程序名，“"%1"”为值项的一部分）
            //
            RegistryKey local = Registry.LocalMachine; // 定位到“HKEY_LOCAL_MACHINE”
            RegistryKey shell = local.OpenSubKey(@"SOFTWARE\Classes\*\shell", true); // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell”
            RegistryKey software = shell.CreateSubKey(name); // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\name”（name代表名称）
            RegistryKey command = software.CreateSubKey("command"); // 创建“command”项，现在定位到了“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\name\command”（name代表名称）
            command.SetValue("", path + " %1"); // 将默认值修改为“software "%1"”（software为你指定的文件）
        }
        /// <summary>
        /// 重启资源管理器的方法
        /// </summary>
        public void 重启资源管理器()
        {
            // 先关闭资源管理器
            // 然后启动资源管理器即可
            关闭含有指定字符串的进程("explorer"); // 关闭进程
            开启进程("setting.exe"); // 启动进程
        }
        /*/// <summary>
        /// 是否有设置在我的电脑上显示控制面板（所有项）快捷方式
        /// </summary>
        /// <returns>true代表有，false代表没有</returns>
        public bool 是否有设置在我的电脑显示控制面板()
        {
            // 通过判断注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”项里是否有“{21EC2020-3AEA-1069-A2DD-08002B30309D}”子项
            // 如果有，就代表有设置在我的电脑显示控制面板（所有项）
            // 否则就没有
            RegistryKey root = Registry.ClassesRoot; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{21EC2020-3AEA-1069-A2DD-08002B30309D}", false);
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{21EC2020-3AEA-1069-A2DD-08002B30309D}”
            switch (control) // switch速度比if快
            {
                case null: // 如果返回空，及没有设置
                    return false; // 返回false
                default: // 如果有，就代表有设置
                    return true; // 返回true
            }
        }*/
        /// <summary>
        /// 设置是否在我的电脑显示控制面板（所有项）图标
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置在我的电脑显示控制面板(bool setting)
        {
            // 通过设置注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{21EC2020-3AEA-1069-A2DD-08002B30309D}”是否存在
            // 存在代表显示
            // 不存在代表隐藏
            RegistryKey root = Registry.CurrentUser; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace");
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”
            switch (setting) // switch速度比if快
            {
                case true: // 如果想要显示
                    control.CreateSubKey("{21EC2020-3AEA-1069-A2DD-08002B30309D}"); // 创建对应的项
                    break;
                default: // 如果不想要显示
                    control.DeleteSubKey("{21EC2020-3AEA-1069-A2DD-08002B30309D}", false); // 删除对应的项
                    break;
            }
        }
        /*/// <summary>
        /// 是否有设置在我的电脑上显示打印机快捷方式
        /// </summary>
        /// <returns>true代表有，false代表没有</returns>
        public bool 是否有设置在我的电脑显示打印机()
        {
            // 通过判断注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”项里是否有“{2227A280-3AEA-1069-A2DE-08002B30309D}”子项
            // 如果有，就代表有设置在我的电脑显示控制面板（所有项）
            // 否则就没有
            RegistryKey root = Registry.ClassesRoot; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{2227A280-3AEA-1069-A2DE-08002B30309D}", false);
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{2227A280-3AEA-1069-A2DE-08002B30309D}”
            switch (control) // switch速度比if快
            {
                case null: // 如果返回空，及没有设置
                    return false; // 返回false
                default: // 如果有，就代表有设置
                    return true; // 返回true
            }
        }*/
        /// <summary>
        /// 设置是否在我的电脑显示打印机快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置在我的电脑显示打印机(bool setting)
        {
            // 通过设置注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{2227A280-3AEA-1069-A2DE-08002B30309D}”是否存在
            // 存在代表显示
            // 不存在代表隐藏
            RegistryKey root = Registry.CurrentUser; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace");
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”
            switch (setting) // switch速度比if快
            {
                case true: // 如果想要显示
                    control.CreateSubKey("{2227A280-3AEA-1069-A2DE-08002B30309D}"); // 创建对应的项
                    break;
                default: // 如果不想要显示
                    control.DeleteSubKey("{2227A280-3AEA-1069-A2DE-08002B30309D}", false); // 删除对应的项
                    break;
            }
        }
        /*/// <summary>
        /// 是否有设置在我的电脑上显示网络连接快捷方式
        /// </summary>
        /// <returns>true代表有，false代表没有</returns>
        public bool 是否有设置在我的电脑显示网络连接()
        {
            // 通过判断注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”项里是否有“{7007ACC7-3202-11D1-AAD2-00805FC1270E}”子项
            // 如果有，就代表有设置在我的电脑显示控制面板（所有项）
            // 否则就没有
            RegistryKey root = Registry.ClassesRoot; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{7007ACC7-3202-11D1-AAD2-00805FC1270E}", false);
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{2227A280-3AEA-1069-A2DE-08002B30309D}”
            switch (control) // switch速度比if快
            {
                case null: // 如果返回空，及没有设置
                    return false; // 返回false
                default: // 如果有，就代表有设置
                    return true; // 返回true
            }
        }*/
        /// <summary>
        /// 设置是否在我的电脑显示网络连接快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置在我的电脑显示网络连接(bool setting)
        {
            // 通过设置注册表“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{7007ACC7-3202-11D1-AAD2-00805FC1270E}”是否存在
            // 存在代表显示
            // 不存在代表隐藏
            RegistryKey root = Registry.CurrentUser; // 定位到“HKEY_CURRENT_USER”
            RegistryKey control = root.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace");
            // 定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace”
            switch (setting) // switch速度比if快
            {
                case true: // 如果想要显示
                    control.CreateSubKey("{7007ACC7-3202-11D1-AAD2-00805FC1270E}"); // 创建对应的项
                    break;
                default: // 如果不想要显示
                    control.DeleteSubKey("{7007ACC7-3202-11D1-AAD2-00805FC1270E}", false); // 删除对应的项
                    break;
            }
        }
        // 调用系统API
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
        /// <summary>
        /// 设置电脑桌面背景
        /// </summary>
        /// <param name="path">要设置的图片所在路径路径</param>
        /// <param name="save">是否将图片保存到临时文件（因为图片要求为bmp格式，需要将转码后的图片保存到临时目录）</param>
        /// <param name="picturesave">临时文件目录（默认为C:\Windows\background.bmp，如果不想保存到临时目录就不需要填）</param>
        public void 设置桌面壁纸(string path, bool save = true, string picturesave = "C:\\Windows\\background.bmp")
        {
            switch (save)
            {
                case true: // 如果要保存到临时目录
                    Bitmap bitmap = new Bitmap(path); // 打开图片文件
                    bitmap.Save(picturesave, ImageFormat.Bmp); // 将文件保存到指定目录，保存为bmp目录
                    SystemParametersInfo(20, 1, picturesave, 0x1 | 0x2); // 设置背景图片
                    break;
                case false: // 如果不用保存到临时目录
                    SystemParametersInfo(20, 1, path, 0x1 | 0x2); // 直接设置背景图片
                    break;
            }
        }
        /*/// <summary>
        /// 启用系统高对比度设置
        /// </summary>
        public void 启动高对比度()
        {
            // 通过打开系统“Windows\Resources\Ease of Access Themes”里的“hcblack.theme”主题文件
            // 启动高对比度
            开启进程(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Resources\\Ease of Access Themes\\hcblack.theme");
            // 打开“Windows\Resources\Ease of Access Themes\hcblack.theme”主题文件
        }*/
        /*/// <summary>
        /// 确定桌面图标是否有小箭头
        /// </summary>
        /// <returns>true代表有，false代表没有</returns>
        public bool 是否有桌面小箭头()
        {
            // 通过判断注册表“HKEY_CLASSES_ROOT\lnkfile”项里是否有“IsShortcut”值项
            // 如果有，就代表有桌面小箭头
            // 否则就没有
            RegistryKey root = Registry.ClassesRoot; // 定位到“HKEY_CLASSES_ROOT”
            RegistryKey lnkfile = root.OpenSubKey("lnkfile", false); // 定位到“HKEY_CLASSES_ROOT\lnkfile”
            switch (lnkfile.GetValue("IsShortcut")) // switch判断速度快过if
            {
                case null: // 即该值项不存在
                    return false; // 返回不存在
                default: // 如果该值不为空
                    return true; // 返回存在
            }

        }*/
        /// <summary>
        /// 设置桌面快捷方式的小箭头
        /// </summary>
        /// <param name="setting">true代表启用，false代表禁用</param>
        public void 设置桌面小箭头(bool setting)
        {
            // 通过修改注册表的“HKEY_CLASSES_ROOT\lnkfile\IsShortcut”是否存在来设置是否显示桌面快捷方式小箭头
            // 如果该值项存在，则显示桌面快捷方式小箭头
            // 如果该值项不存在，则隐藏桌面快捷方式小箭头
            RegistryKey root = Registry.ClassesRoot; // 定位到“HKEY_CLASSES_ROOT”
            RegistryKey lnkfile = root.OpenSubKey("lnkfile", true); // 定位到“HKEY_CLASSES_ROOT\lnkfile”
            switch (setting) // switch判断速度快过if
            {
                case true: // 如果要显示小箭头
                    lnkfile.SetValue("IsShortcut", ""); // 新建该值项
                    break;
                default: // 如果不要显示小箭头
                    switch (lnkfile.GetValue("IsShortcut") != null) // 通过switch判断该项是否存在
                    {
                        case true: // 如果返回结果不为空，及该项存在
                            lnkfile.DeleteValue("IsShortcut"); // 就删除该值项
                            break;
                        // 否则就代表原来没有该值项
                        // 不进行操作
                    }
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“库”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有库()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{031E4825-7B94-4dc3-B131-E946B44C8DD5}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{031E4825-7B94-4dc3-B131-E946B44C8DD5}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{031E4825-7B94-4dc3-B131-E946B44C8DD5}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“库”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置库(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{031E4825-7B94-4dc3-B131-E946B44C8DD5}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{031E4825-7B94-4dc3-B131-E946B44C8DD5}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{031E4825-7B94-4dc3-B131-E946B44C8DD5}", 1); // 把值设置为1
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“控制面板”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有控制面板()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“控制面板”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置控制面板(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}", 1); // 把值设置为1
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“个人文件夹”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有个人文件夹()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{59031a47-3f72-44a7-89c5-5595fe6b30ee}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{59031a47-3f72-44a7-89c5-5595fe6b30ee}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{59031a47-3f72-44a7-89c5-5595fe6b30ee}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“个人文件夹”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置个人文件夹(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{59031a47-3f72-44a7-89c5-5595fe6b30ee}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{59031a47-3f72-44a7-89c5-5595fe6b30ee}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{59031a47-3f72-44a7-89c5-5595fe6b30ee}", 1); // 把值设置为1
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“回收站”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有回收站()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{645FF040-5081-101B-9F08-00AA002F954E}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{645FF040-5081-101B-9F08-00AA002F954E}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{645FF040-5081-101B-9F08-00AA002F954E}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“回收站”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置回收站(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{645FF040-5081-101B-9F08-00AA002F954E}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{645FF040-5081-101B-9F08-00AA002F954E}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{645FF040-5081-101B-9F08-00AA002F954E}", 1); // 把值设置为1
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“网络”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有网络()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{645FF040-5081-101B-9F08-00AA002F954E}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“网络”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置网络(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}", 1); // 把值设置为1
                    break;
            }
        }
        /// <summary>
        /// 桌面上是否有“我的电脑”的快捷方式
        /// </summary>
        /// <returns>true代表显示，false代表隐藏</returns>
        public bool 是否有我的电脑()
        {
            // 通过判断注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”是否有“{20D04FE0-3AEA-1069-A2D8-08002B30309D}”值项
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", false);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            if (sortware28.GetValue("{20D04FE0-3AEA-1069-A2D8-08002B30309D}") == null) // 先判断该项是否存在
            {
                // 如果不存在
                return false; // 即没有有显示，返回false
            }
            switch (sortware28.GetValue("{20D04FE0-3AEA-1069-A2D8-08002B30309D}").ToString()) // 因为null不能转换为string，所以需要用if判断项是否存在
            {
                case "1": // 如果值为1
                    return false; // 即没有有显示，返回false
                default: // 如果值为0
                    return true; // 即有显示，返回true
            }
        }
        /// <summary>
        /// 设置是否在桌面显示“我的电脑”的快捷方式
        /// </summary>
        /// <param name="setting">true代表显示，false代表隐藏</param>
        public void 设置我的电脑(bool setting)
        {
            // 通过修改注册表“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{20D04FE0-3AEA-1069-A2D8-08002B30309D}”值
            // 如果有且值为0就代表显示
            // 否则就隐藏（即值是1或不存在）
            RegistryKey IIM4 = Registry.CurrentUser; // 定位到“HKEY_Current_User”
            RegistryKey sortware28 = IIM4.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", true);
            // 定位到“HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel”
            switch (setting) // switch的速度比if快
            {
                case true: // 如果用户要显示图标
                    sortware28.SetValue("{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 0); // 把值设置为0
                    break;
                default: // 如果用户要隐藏图标
                    sortware28.SetValue("{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 1); // 把值设置为1
                    break;
            }
        }
        class Cmd
        {
            /// <summary>
            /// 执行cmd后返回的结果
            /// </summary>
            public string 返回结果;
            /// <summary>
            /// 执行cmd命令
            /// </summary>
            public void 执行命令(string name)
            {
                // 调用cmd
                // 没有C++调用cmd效果好
                Process CmdProcess = new Process();
                CmdProcess.StartInfo.FileName = "cmd.exe";
                CmdProcess.StartInfo.CreateNoWindow = true;
                CmdProcess.StartInfo.UseShellExecute = false;
                CmdProcess.StartInfo.RedirectStandardInput = true;
                CmdProcess.StartInfo.RedirectStandardOutput = true;
                CmdProcess.StartInfo.RedirectStandardError = true;
                CmdProcess.StartInfo.Arguments = "/c " + name;
                CmdProcess.Start();
                返回结果 = CmdProcess.StandardOutput.ReadToEnd();
                CmdProcess.WaitForExit();
                CmdProcess.Close();
            }
        }
        /// <summary>
        /// 在指定时间后重启计算机
        /// </summary>
        /// <param name="time">在此时间后重启计算机（秒，默认为0，为空代表立即重启计算机）</param>
        public void 重启电脑(int time = 0)
        {
            // 通过调用cmd执行命令“shutdown -r -t 0”让电脑在0秒后重启（0可以改成其他时间）
            Cmd cmd = new Cmd(); // 创建命令提示符实例
            cmd.执行命令("shutdown -r -t " + time); // 执行命令重启电脑
        }
        /// <summary>
        /// 在指定时间后关闭计算机
        /// </summary>
        /// <param name="time">在此时间后关闭计算机（秒，默认为0，为空代表立即重启计算机）</param>
        public void 关闭电脑(int time = 0)
        {
            // 通过调用cmd执行命令“shutdown -s -t 0”让电脑在0秒后关闭（0可以改成其他时间）
            Cmd cmd = new Cmd(); // 创建命令提示符实例
            cmd.执行命令("shutdown -s -t " + time); // 执行命令关闭电脑
        }
        /// <summary>
        /// 在0秒后后注销用户
        /// </summary>
        public void 注销用户()
        {
            // 通过调用cmd执行命令“shutdown -l”让电脑在0秒后注销
            Cmd cmd = new Cmd(); // 创建命令提示符实例
            cmd.执行命令("shutdown -l "); // 执行命令注销用户
        }
        /// <summary>
        /// 在0秒后休眠电脑
        /// </summary>
        public void 休眠电脑()
        {
            // 通过调用cmd执行命令“shutdown -h”让电脑在0秒后休眠
            Cmd cmd = new Cmd(); // 创建命令提示符实例
            cmd.执行命令("shutdown -h"); // 执行命令休眠电脑
        }
        /// <summary>
        /// 在0秒后锁定用户
        /// </summary>
        public void 锁定用户()
        {
            // 通过调用cmd执行命令“rundll32.exe user32.dll LockWorkStation”让电脑在0秒后锁定用户
            Cmd cmd = new Cmd(); // 创建命令提示符实例
            cmd.执行命令("rundll32.exe user32.dll LockWorkStation"); // 执行命令锁定用户
        }
        /// <summary>
        /// 是否开启UAC
        /// </summary>
        /// <returns>true代表开启，false代表关闭</returns>
        public bool 是否开启UAC()
        {
            // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”
            // 如果里面的“EnableLUA”的值为“0”，即没有开启UAC
            // 如果里面的值为“1”，即开启了UAC
            RegistryKey local = Registry.LocalMachine; // 定位到“HKEY_LOCAL_MACHINE”
            RegistryKey system = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", false);
            // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”
            switch (system.GetValue("EnableLUA").ToString()) // 读取“EnableLUA”的值项
            {
                case "0": // 如果返回“0”，即未启动UAC
                    return false; // 返回false
                default: // 如果返回“1”，即启动UAC
                    return true; // 返回true
            }
        }
        /// <summary>
        /// 设置是否启用UAC
        /// </summary>
        /// <param name="setting">true代表启用，false代表禁用</param>
        public void 设置UAC(bool setting)
        {
            // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”
            // 如果里面的“EnableLUA”的值为“0”，即没有开启UAC
            // 如果里面的值为“1”，即开启了UAC
            RegistryKey local = Registry.LocalMachine; // 定位到“HKEY_LOCAL_MACHINE”
            RegistryKey system = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", true);
            // 定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”
            switch (setting) // switch比if快
            {
                case true: // 即用户要开启UAC
                    system.SetValue("EnableLUA", 1); // 将“EnableLUA”的值设为“1”
                    break;
                case false: // 即用户要关闭UAC
                    system.SetValue("EnableLUA", 0); // 将“EnableLUA”的值设为“0”
                    break;
            }
        }
        /// <summary>
        /// 更改Windows系统登录屏幕背景图片（只限Windows 7）
        /// </summary>
        /// <param name="setting">是否设置背景图片，true代表设置，false代表使用默认背景图片</param>
        /// <param name="picture">图片文件（非文件所在目录）</param>
        public void 更改锁屏背景(bool setting, Bitmap picture = null)
        {
            // 通过修改注册表“HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground”的值
            // 值为1代表更改为自定义背景图片
            // 值为0或无该值项代表使用默认背景图片
            switch (setting) // switch快过if
            {
                case true: // 如果要设置
                    Directory.CreateDirectory(Environment.SystemDirectory + "\\oobe\\info\\backgrounds"); // 创建用于存放背景图片的文件夹
                    picture.Save(Environment.SystemDirectory + "\\oobe\\info\\backgrounds\\backgroundDefault.jpg", ImageFormat.Jpeg); // 保存背景图片
                    // 修改注册表
                    RegistryKey im = Registry.LocalMachine; // 定位到注册表“HKEY_Local_Machine”
                    RegistryKey lo = im.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI", true);
                    // 定位到“HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI”
                    RegistryKey back = lo.CreateSubKey("Background"); // 新建对应项目
                    back.SetValue("OEMBackground", 1, RegistryValueKind.DWord);
                    break;
                default: // 如果不要设置
                    // 修改注册表
                    im = Registry.LocalMachine; // 定位到注册表“HKEY_Local_Machine”
                    lo = im.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI", true);
                    // 定位到“HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI”
                    back = lo.CreateSubKey("Background"); // 新建对应的值项
                    back.SetValue("OEMBackground", 0, RegistryValueKind.DWord); // 将值设为0
                    break;
            }
        }
        class OEM
        {
            // 通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation”里面对应的选项来修改OEM信息
            //
            //  +--------------+--------------+--------------------------------------------------+
            //  |   值项说明   |    值项名称  |                     可以填的内容                 |
            //  +--------------+--------------+--------------------------------------------------+
            //  |    OEM图片   |      Logo    |   OEM图片所在位置（一般为绝对路径，注意别填错了）|
            //  +--------------+--------------+--------------------------------------------------+
            //  |  电脑开发商  | Manufacturer |                                                  |
            //  +--------------+--------------+                                                  |
            //  |   电脑型号   |    Model     |                                                  |
            //  +--------------+--------------+                       随便                       |
            //  | 技术支持电话 | SupportPhone |                                                  |
            //  +--------------+--------------+                                                  |
            //  | 技术支持时间 | SupportHours |                                                  |
            //  +--------------+--------------+--------------------------------------------------+
            //  | 技术支持网站 |  SupportURL  |            填网址，不要填成其他东西了            |
            //  +--------------+--------------+--------------------------------------------------+
            //
            static string Windows = Environment.GetFolderPath(Environment.SpecialFolder.System); // 获取系统文件所在路径
            static RegistryKey OE = Registry.LocalMachine; // 定位到HKEY_LOCAL_MACHINE项
            static RegistryKey OEMs = OE.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation");
            // 然后新建“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation”
            // 原变量报废（OE）
            /// <summary>
            /// 设置OEM图标
            /// </summary>
            /// <param name="picture">要设置的图片（不是图片路径）</param>
            public void 更改OEM图片(Bitmap picture = null)
            {
                OEMs.SetValue("Logo", Windows + "\\OEM.bmp"); // 创建对应的值项
                picture.Save(Windows + "\\OEM.bmp", ImageFormat.Bmp); // 将图片保存到指定位置
            }
            /// <summary>
            /// 设置OEM制造商
            /// </summary>
            /// <param name="name">制造商名称</param>
            public void 更改制作商(string name)
            {
                OEMs.SetValue("Manufacturer", name);
            }
            /// <summary>
            /// 设置OEM电脑型号
            /// </summary>
            /// <param name="name">电脑型号名称</param>
            public void 更改电脑型号(string name)
            {
                OEMs.SetValue("Model", name);
            }
            /// <summary>
            /// 设置OEM电脑技术支持电话
            /// </summary>
            /// <param name="name">技术支持电话</param>
            public void 更改技术支持电话(string name)
            {
                OEMs.SetValue("SupportPhone", name);
            }
            /// <summary>
            /// 设置OEM技术支持时间
            /// </summary>
            /// <param name="name">技术支持时间</param>
            public void 更改技术支持时间(string name)
            {
                OEMs.SetValue("SupportHours", name);
            }
            /// <summary>
            /// 设置OEM技术支持网站
            /// </summary>
            /// <param name="name">技术支持网站</param>
            public void 更改技术支持网站(string name)
            {
                OEMs.SetValue("SupportURL", name);
            }
            /// <summary>
            /// 清空OEM信息（这里能设置的信息，其他不能清空）
            /// </summary>
            public void 清空OEM信息()
            {
                // 删除所有有关信息
                OEMs.DeleteValue("Logo");         // 删除OEM图标所对应的项
                OEMs.DeleteValue("Manufacturer"); // 删除OEM开发商的信息
                OEMs.DeleteValue("Model");        // 删除OEM电脑的信息
                OEMs.DeleteValue("SupportPhone"); // 删除OEM技术支持电话的信息
                OEMs.DeleteValue("SupportHours"); // 删除OEM技术支持时间的信息
                OEMs.DeleteValue("SupportURL");   // 删除技术支持网站的信息
            }
        }
    }

}

// End
// 结束
